package main

import (
	"fmt"
	"strings"
	"unicode/utf8"
)

func main() {

	/*1、是否包含某个字符串*/
	name := "go语言开发工程师"
	fmt.Println(strings.Contains(name, "go")) //name的字符串中是否包含go这个字符

	/*2、计算带中文的字符串长度 需要将字符串转为 rune类型（int32）*/
	//带中文的字符串长度,len()函数计算字符的字节长度，中文需要转为rune类型
	str1 := "wo zai 深圳"
	r := []rune(str1)
	fmt.Println(len(r)) //9

	//也可以使用 utf8.RuneCountInString() 计算携带中文的字符串长度
	num := utf8.RuneCountInString(str1)
	fmt.Println(num) //9

	/*3、计算子字符串出现的次数 strings.Count()*/
	str2 := "mook jiang 深圳"
	o := strings.Count(str2, "o") //计算o出现的次数
	fmt.Println(o)

	/*4、字符的分割，以某个字符分割，分割符字符串不会出现在结果里，分割符不存在不会报错 strings.Split()*/
	str3 := "hello-world"
	fmt.Println(strings.Split(str3, "-")) //结果为切片：[hello world]

	/*5、字符串是否包含前缀strings.HasPrefix() 是否包含后缀strings.HasSuffix()*/
	str4 := "go to play pingping"
	fmt.Println(strings.HasPrefix(str4, "go"))       //str4字符串是否以go开头
	fmt.Println(strings.HasSuffix(str4, "pingping")) //str4字符串是否以pingping结尾

	/*6、查询子字符出现的位置，英文字符就是实际位置，含有中文就是字节位置*/
	str5 := "你好 world go go"
	sbustr := "好"
	str6 := "world"
	fmt.Println(strings.IndexRune(str5, 'o')) //第8个字节
	fmt.Println(strings.IndexRune(str6, 'r')) // 索引为2

	//返回含有中文的中文字符的位置
	n := strings.Index(str5, sbustr)
	fmt.Println(utf8.RuneCountInString(str5[:n]))

	/*7、子字符串替换strings.Replace()*/
	str7 := "go go 开发 hello"
	fmt.Println(strings.Replace(str7, "go", "java", -1)) //n小于0代表全部替换，1代表替换第一个，2代表替换前两个
	fmt.Println(strings.Replace(str7, "go", "java", 1))

	/*8、大小写转换*/
	fmt.Println(strings.ToLower("GO")) //转小写
	fmt.Println(strings.ToUpper("go")) //转大写

	/*9、去指定字符*/
	str9 := " #$hello #world #"
	str10 := "#$hello #world #"
	fmt.Println(strings.Trim(str9, " "))   //去掉字符串前后空格
	fmt.Println(strings.Trim(str10, "#"))  //去掉字符串前后#
	fmt.Println(strings.Trim(str10, "#$")) //去掉字符串前后#或者$或者#$

	fmt.Println(strings.TrimLeft(str10, "#"))  //去掉左边指定字符
	fmt.Println(strings.TrimRight(str10, "#")) //去掉右边指定字符

}
